/**
 * @author 董一华
 * @since 1.00
 * @version 1.00
 * 
 * 日期控件
 * 使用说明：
 * jsp中使用范例：<htdz-tag:DateTag  name="startdate" value="${startdate}" date="YESTERDAY"/>
 * date的值详见类说明，date参数可省略；缺省值为今日
 * (必须在head中引用Calendar的css和js文件)
 * interval为日期间隔，缺省值为0，可以输入负数；如果interval!=0，则根据date值，按MyFormat.getDate(interval,date)获取新日期
 * 
 * 修订列表： v1.00 2009-11-09 
 * 			修订人：董一华 
 * 			修订内容：初始版本
 * 
 */

package com.zjht.gmcc.bean.tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

import com.zjht.gmcc.bean.util.MyFormat;

public class DateTag extends TagSupport {

	private static final long serialVersionUID = -498831609766563781L;
	private String name;
	private String value;
	private String date;
	private int interval;// 日期间隔

	public DateTag() {
	}

	public void setName(String newName) {
		name = newName;
	}

	public void setValue(String newValue) {
		value = newValue;
	}

	public void setDate(String date) {
		this.date = date;
	}

	public void setInterval(int interval) {
		this.interval = interval;
	}

	@SuppressWarnings("static-access")
	public int doStartTag() throws JspException {
		String name = this.name;
		String value = this.value;
		String date = this.date;
		int interval = this.interval;

		if (name == null || name.length() == 0) {
			throw new JspException("日期控件名不能为空！");
		}
		if (value == null || value.length() != 10) {
			if (date == null)
				value = MyFormat.getToday();
			else {
				date = date.toUpperCase();
				if (date.equals("LASTMONTH")) {// 上个月的今天
					value = MyFormat.getDayInLastMonth();
				} else if (date.equals("LASTWEEK")) {// 一周前
					value = MyFormat.getDayInLastWeek();
				} else if (date.equals("YESTERDAY")) {// 昨天
					value = MyFormat.getYesterday();
				} else if (date.equals("TOMORROW")) {// 明天
					value = MyFormat.getTomorrow();
				} else if (date.equals("NEXTWEEK")) {// 一周后
					value = MyFormat.getDayInNextWeek();
				} else if (date.equals("TODAY")) {// 今天
					value = MyFormat.getToday();
				} else if (date.equals("FIRSTDAYINTHISMONTH")) {// 本月1日
					value = MyFormat.getFirstDayInThisMonth();
				} else if (date.equals("LASTDAYINTHISMONTH")) {// 本月最后一日
					value = MyFormat.getLastDayInThisMonth();
				} else if (date.equals("FIRSTDAYINLASTMONTH")) {// 上月1日
					value = MyFormat.getFirstDayInLastMonth();
				} else if (date.equals("LASTDAYINLASTMONTH")) {// 上月最后一日
					value = MyFormat.getLastDayInLastMonth();
				} else if (date.equals("FIRSTDAYINNEXTMONTH")) {// 下月1日
					value = MyFormat.getFirstDayInNextMonth();
				} else if (date.equals("LASTDAYINNEXTMONTH")) {// 下月最后一日
					value = MyFormat.getLastDayInNextMonth();
				}
				if (MyFormat.isStrNull(value))
					value = MyFormat.getToday();
			}
			if (interval != 0) {
				value = MyFormat.getDate(interval, value);
			}
		}
		
		StringBuilder html = new StringBuilder();

		try {
			html.append("<input style=\"cursor:pointer\" name=\"");
			html.append(name);
			html.append("\"	id=\"");
			html.append(name);
			html.append("\" type=\"text\" size=\"10\" value=\"");
			html.append(value);
			html.append("\"  readonly=\"true\" /><script type=\"text/javascript\">");
			html.append("Calendar.setup({inputField : \"");
			html.append(name);
			html.append("\",ifFormat:\"%Y-%m-%d\",showsTime:false,button:\"");
			html.append(name);
			html.append("\",singleClick:false,step:1});</script>");
			pageContext.getOut().print(html.toString());
		} catch (Exception e) {
			throw new JspException(e.getMessage());
		}
		html = null;
		return this.SKIP_BODY;
	}

}
